package br.com.eduquiz.session;

import br.com.eduquiz.entity.*;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.security.Restrict;
import org.jboss.seam.framework.EntityQuery;
import java.util.Arrays;

@Name("usuarioList")
@Restrict("#{s:hasRole('Usuario')}")
public class UsuarioList extends EntityQuery<Usuario> {
	
	private static final long serialVersionUID = 8333384371390049829L;

	private static final String EJBQL = "select usuario from Usuario usuario";

	private static final String[] RESTRICTIONS = {
		"lower(usuario.nome) like lower(concat('%',#{usuarioList.usuario.nome},'%'))",
		"lower(usuario.email) like lower(concat('%',#{usuarioList.usuario.email},'%'))",
		"usuario.status = #{usuarioList.usuario.status}",
		"usuario.subGrupo.id = #{usuarioList.subgrupo.id}",
		"usuario.subGrupo.grupo.id = #{usuarioList.grupo.id}",
		"usuario.subGrupo.grupo.administradorGrupo.id = #{usuarioList.administradorGrupo.id}",
	};

	private Usuario usuario = new Usuario();
	
	@In(required=false)
	private SubGrupo subgrupo;
	
	@In(required=false)
	private Grupo grupo;
	
	@In(required=false)
	private AdministradorGrupo administradorGrupo;

	public UsuarioList() {
		setEjbql(EJBQL);
		setRestrictionExpressionStrings(Arrays.asList(RESTRICTIONS));
		setMaxResults(25);
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setSubgrupo(SubGrupo subgrupo) {
		this.subgrupo = subgrupo;
	}

	public SubGrupo getSubgrupo() {
		return subgrupo;
	}

	public void setGrupo(Grupo grupo) {
		this.grupo = grupo;
	}

	public Grupo getGrupo() {
		return grupo;
	}

	public void setAdministradorGrupo(AdministradorGrupo administradorGrupo) {
		this.administradorGrupo = administradorGrupo;
	}

	public AdministradorGrupo getAdministradorGrupo() {
		return administradorGrupo;
	}
}
